<template>
	<div class="wrapper">
		<div class="back-icon" @click="goBack()">
			<i class="fa fa-arrow-left"></i>
		</div>
		<!-- header部分 -->
		<header>
			<p>商家信息</p>
		</header>
		<!-- 商家logo部分 -->
		<div class="business-logo">
			<img :src="business.businessImg">
		</div>
		<!-- 商家信息部分 -->
		<div class="business-info">
			<h1>{{business.businessName}}</h1>
			<p>&#165;{{business.starPrice}}起送 &#165;{{business.deliveryPrice}}配送</p>
			<p>{{business.businessExplain}}</p>
		</div>
		<!-- 食品列表部分 -->
		<ul class="food">
			<li v-for="(item,index) in foodArr">
				<div class="food-left">
					<img :src="item.foodImg">
					<div class="food-left-info">
						<h3>{{item.foodName}}</h3>
						<p>{{item.foodExplain}}</p>
						<p>&#165;{{item.foodPrice}}</p>
					</div>
				</div>
				<div class="food-right">
					<div>
						<i class="fa fa-minus-circle" @click="minus(index)" v-show="item.quantity!=0"></i>
					</div>
					<p><span v-show="item.quantity!=0">{{item.quantity}}</span></p>
					<div>
						<i class="fa fa-plus-circle" @click="add(index)"></i>
					</div>
				</div>
			</li>
		</ul>
		<!-- 购物车部分 -->
		<div class="cart">
			<div class="cart-left">
			        <div class="cart-left-icon"
			             :style="totalQuantity() == 0 ? 'background-color: #505051;' : 'background-color: #3190E8;'"
			             @click="toggleCartVisibility">
			          <i class="fa fa-shopping-cart"></i>
			          <div class="cart-left-icon-quantity" v-show="totalQuantity() != 0">
			            {{ totalQuantity() }}
			          </div>
			        </div>
			        <div class="cart-left-info">
			          <p>&#165;{{ totalPrice() }}</p>
			          <p>另需配送费&#165;{{ business.deliveryPrice }}</p>
			        </div>
			      </div>
			<div class="cart-right">
				<!-- 不够起送费 -->
				<div class="cart-right-item" v-show="totalSettle()<business.starPrice"
					style="background-color: #535356;cursor: default;">
					&#165;{{business.starPrice}}起送
				</div>
				<!-- 达到起送费 -->
				<div class="cart-right-item" @click="toOrder" v-show="totalSettle()>=business.starPrice">
					去结算
				</div>
			</div>
		</div>
		<!-- 新增购物车弹出层 -->
		  <transition name="fade">
		    <div class="cart-popup" v-if="cartVisible">
		      <div class="cart-popup-content">
		        <h2>购物车详情</h2>
		        <ul class="cart-items">
		          <li v-for="(item, index) in foodArr" :key="index" class="cart-item">
		            <span class="item-name">{{ item.foodName }}</span>
		            <span class="item-quantity">x {{ item.quantity }}</span>
		            <span class="item-price">&#165;{{ item.foodPrice }}</span>
		            <span class="item-total">&#165;{{ item.foodPrice * item.quantity }}</span>
		          </li>
		        </ul>
		        <button @click="cartVisible = false" class="close-button">关闭</button>
		      </div>
		    </div>
		  </transition>
	</div>
</template>
<script>
	import {useRouter} from 'vue-router'
	import {useRoute} from 'vue-router'
	import {ref,onMounted,getCurrentInstance, reactive, toRef} from 'vue';
	export default {
		name: 'BusinessInfo',
		
		setup(){
			const currentInstance = getCurrentInstance();
			const router = useRouter();
			const route = useRoute();
			const businessId = route.params.businessId;
			const business = ref({});
			const foodArr = ref([]);
			const user = ref({});
			const cartVisible = ref(false);
			
			    const toggleCartVisibility = () => {
			      cartVisible.value = !cartVisible.value;
			    };
			
			const goBack = () => {
				router.go(-1);
			};
			
			const listCart = () => {
				currentInstance.appContext.config.globalProperties.$axios.post(
						'CartController/listCart', currentInstance.appContext.config
						.globalProperties.$qs.stringify({
							businessId: businessId,
							userId: user.value.userId
						}))
					.then(response => {
						let cartArr = response.data;
						//遍历所有食品列表
						for (let foodItem of foodArr.value) {
							foodItem.quantity = 0;
							for (let cartItem of cartArr) {
								if (cartItem.foodId == foodItem.foodId) {
									foodItem.quantity = cartItem.quantity;
								}
							}
						}
						foodArr.value.sort();
					})
					.catch(error => {
						console.error(error);
					});
			}
			
			const add = (index) => {
				//首先做登录验证
				if (user.value == null) {
					router.push({
						path: '/login'
					});
					return;
				}
				if (foodArr.value[index].quantity == 0) {
					//做insert
					savaCart(index);
				} else {
					//做update
					updateCart(index, 1);
				}
			}
			
			const minus = (index) => {
				//首先做登录验证
				if (user.value == null) {
					router.push({
						path: '/login'
					});
					return;
				}
				if (foodArr.value[index].quantity > 1) {
					//做update
					updateCart(index, -1);
				} else {
					//做delete
					removeCart(index);
				}
			}
			
			const savaCart = (index) => {
				currentInstance.appContext.config.globalProperties.$axios.post(
						'CartController/saveCart', currentInstance.appContext.config
						.globalProperties.$qs.stringify({
							businessId: businessId,
							userId: user.value.userId,
							foodId: foodArr.value[index].foodId
						}))
					.then(response => {
						if (response.data == 1) {
							//此食品数量要更新为1；
							foodArr.value[index].quantity = 1;
							foodArr.value.sort();
						} else {
							swal('向购物车中添加食品失败！');
						}
					})
					.catch(error => {
						console.error(error);
					});
			}
			
			const updateCart = (index, num) => {
				currentInstance.appContext.config.globalProperties.$axios.post(
						'CartController/updateCart', currentInstance.appContext.config
						.globalProperties.$qs.stringify({
							businessId: businessId,
							userId: user.value.userId,
							foodId: foodArr.value[index].foodId,
							quantity: foodArr.value[index].quantity + num
						}))
					.then(response => {
						if (response.data == 1) {
							//此食品数量要更新为1或-1；
							foodArr.value[index].quantity += num;
							foodArr.value.sort();
						} else {
							swal('向购物车中更新食品失败！');
						}
					})
					.catch(error => {
						console.error(error);
					});
			}
			
			const removeCart = (index) => {
				currentInstance.appContext.config.globalProperties.$axios.post(
						'CartController/removeCart', currentInstance.appContext.config
						.globalProperties.$qs.stringify({
							businessId: businessId,
							userId: user.value.userId,
							foodId: foodArr.value[index].foodId
						}))
					.then(response => {
						if (response.data == 1) {
							//此食品数量要更新为0；视图的减号和数量要消失
							foodArr.value[index].quantity = 0;
							foodArr.value.sort();
						} else {
							alert('从购物车中删除食品失败！');
						}
					})
					.catch(error => {
						console.error(error);
					});
			}
			
			const toOrder = () => {
				router.push({
					name: 'Orders',
					params: {
						businessId: business.value.businessId
					}
				});
			}
			
			const totalPrice = () => {
				let total = 0;
				for (let item of foodArr.value) {
					total += parseInt(item.foodPrice *100) *item.quantity /100;
				}
				return total;
			}
			
			const totalQuantity = () => {
				let quantity = 0;
				for (let item of foodArr.value) {
					quantity += item.quantity;
				}
				return quantity;
			}
			
			const totalSettle = () => {
				return totalPrice() + business.value.deliveryPrice;
			}
			
			onMounted(() => {
				user.value = currentInstance.appContext.config.globalProperties.$getSessionStorage('user');
				// 根据orderTypeId查询商家信息
				currentInstance.appContext.config.globalProperties.$axios.post(
						'BusinessController/getBusinessById', currentInstance.appContext.config
						.globalProperties.$qs.stringify({
							businessId: businessId
						}))
					.then(response => {
						business.value = response.data;
					})
					.catch(error => {
						console.error(error);
					});
				//根据businessId查询所属食品信息
				currentInstance.appContext.config.globalProperties.$axios.post(
						'FoodController/listFoodByBusinessId', currentInstance.appContext.config
						.globalProperties.$qs.stringify({
							businessId: businessId
						}))
					.then(response => {
						foodArr.value = response.data;
						for (let i = 0; i < foodArr.value.length; i++) {
							foodArr.value[i].quantity = 0;
						}
						//如果已登录，那么需要去查询购物车中是否已经选购了某个食品
						if (user != null) {
							listCart();
						}
					})
					.catch(error => {
						console.error(error);
					});					
			});
			
			return{
				businessId,business,foodArr,user,
				listCart,add,minus,savaCart,updateCart,removeCart,toOrder,
				totalPrice,totalQuantity,totalSettle,goBack, cartVisible,
      toggleCartVisibility
			}
		}
	}
</script>
<style scoped>
	.cart-popup {
	  position: fixed;
	  top: 0;
	  left: 0;
	  width: 100%;
	  height: 100%;
	  background-color: rgba(0, 0, 0, 0.5);
	  display: flex;
	  justify-content: center;
	  align-items: center;
	}
	
	.cart-popup-content {
	  background: white;
	  padding: 20px;
	  border-radius: 5px;
	  box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
	}
	
	.cart-items {
	  list-style-type: none;
	  padding: 0;
	}
	
	.cart-item {
	  display: flex;
	  justify-content: space-between;
	  align-items: center;
	  padding: 10px 0;
	  border-bottom: 1px solid #eee;
	  font-size: 16px;
	}
	
	.cart-item:last-child {
	  border-bottom: none;
	}
	
	.item-name {
	  font-weight: bold;
	}
	
	.item-quantity {
	  color: #777;
	}
	
	.item-price {
	  color: green; /* 单价使用绿色 */
	}
	
	.item-total {
	  color: #3a87ad;
	}
	
	.close-button {
	  background-color: #d9534f;
	  color: white;
	  border: none;
	  padding: 10px 20px;
	  cursor: pointer;
	  border-radius: 3px;
	  transition: background-color 0.3s;
	  margin-top: 20px;
	}
	
	.close-button:hover {
	  background-color: #c9302c;
	}
	/****************** 总容器 ******************/
	.wrapper {
		width: 100%;
		height: 100%;
	}
	/*********** 回退按钮 ***********/
	.wrapper .back-icon{
		width: 12vw;
		height: 12vw;
		background-color: #0097FF;
		color: #FFFFFF;
		font-size: 4.8vw;
		position: fixed;
		left: 0;
		top: 0;
		z-index: 1001;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	/****************** header部分 ******************/
	.wrapper header {
		width: 100%;
		height: 12vw;
		background-color: #0097FF;
		color: #fff;
		font-size: 4.8vw;
		position: fixed;
		left: 0;
		top: 0;
		z-index: 1000;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	/****************** 商家logo部分 ******************/
	.wrapper .business-logo {
		width: 100%;
		height: 35vw;
		/*使用上外边距避开header部分*/
		margin-top: 12vw;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	.wrapper .business-logo img {
		width: 40vw;
		height: 30vw;
		border-radius: 5px;
	}

	/****************** 商家信息部分 ******************/
	.wrapper .business-info {
		width: 100%;
		height: 20vw;
		display: flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;
	}

	.wrapper .business-info h1 {
		font-size: 5vw;
	}

	.wrapper .business-info p {
		font-size: 3vw;
		color: #666;
		margin-top: 1vw;
	}

	/****************** 食品列表部分 ******************/
	.wrapper .food {
		box-sizing: border-box;
		padding-bottom: 14vw;
		width: 100%;
		/*使用下外边距避开footer部分*/
		margin-bottom: 14vw;
	}

	.wrapper .food li {
		width: 100%;
		box-sizing: border-box;
		padding: 2.5vw;
		user-select: none;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .food li .food-left {
		display: flex;
		align-items: center;
	}

	.wrapper .food li .food-left img {
		width: 20vw;
		height: 20vw;
	}

	.wrapper .food li .food-left .food-left-info {
		margin-left: 3vw;
	}

	.wrapper .food li .food-left .food-left-info h3 {
		font-size: 3.8vw;
		color: #555;
	}

	.wrapper .food li .food-left .food-left-info p {
		font-size: 3vw;
		color: #888;
		margin-top: 2vw;
	}

	.wrapper .food li .food-right {
		width: 16vw;
		display: flex;
		justify-content: space-between;
		align-items: center;
	}

	.wrapper .food li .food-right .fa-minus-circle {
		font-size: 5.5vw;
		color: #999;
		cursor: pointer;
	}

	.wrapper .food li .food-right p {
		font-size: 3.6vw;
		color: #333;
	}

	.wrapper .food li .food-right .fa-plus-circle {
		font-size: 5.5vw;
		color: #0097EF;
		cursor: pointer;
	}

	/****************** 购物车部分 ******************/
	.wrapper .cart {
		width: 100%;
		height: 14vw;
		position: fixed;
		left: 0;
		bottom: 0;
		display: flex;
	}

	.wrapper .cart .cart-left {
		flex: 2;
		background-color: #505051;
		display: flex;
	}

	.wrapper .cart .cart-left .cart-left-icon {
		width: 16vw;
		height: 16vw;
		box-sizing: border-box;
		border: solid 1.6vw #444;
		border-radius: 8vw;
		background-color: #3190E8;
		font-size: 7vw;
		color: #fff;
		display: flex;
		justify-content: center;
		align-items: center;
		margin-top: -4vw;
		margin-left: 3vw;
		position: relative;
	}

	.wrapper .cart .cart-left .cart-left-icon-quantity {
		width: 5vw;
		height: 5vw;
		border-radius: 2.5vw;
		background-color: red;
		color: #fff;
		font-size: 3.6vw;
		display: flex;
		justify-content: center;
		align-items: center;
		position: absolute;
		right: -1.5vw;
		top: -1.5vw;
	}

	.wrapper .cart .cart-left .cart-left-info p:first-child {
		font-size: 4.5vw;
		color: #fff;
		margin-top: 1vw;
	}

	.wrapper .cart .cart-left .cart-left-info p:last-child {
		font-size: 2.8vw;
		color: #AAA;
	}

	.wrapper .cart .cart-right {
		flex: 1;
	}

	/*达到起送费时的样式*/
	.wrapper .cart .cart-right .cart-right-item {
		width: 100%;
		height: 100%;
		background-color: #38CA73;
		color: #fff;
		font-size: 4.5vw;
		font-weight: 700;
		user-select: none;
		cursor: pointer;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	/*不够起送费时的样式（只有背景色和鼠标样式的区别）*/
	/*
				  .wrapper .cart .cart-right .cart-right-item{
				  width: 100%;
				  height: 100%;
				  background-color: #535356;
				  color: #fff;
				  font-size: 4.5vw;
				  font-weight: 700;
				  user-select: none;
				  
				  display: flex;
				  justify-content: center;
				  align-items: center;
				  }
				  */
</style>